package Modelo;


public class Taladro implements Habilidad {
	private Numeros potencia;
	public int vidaUtil;
	public boolean ejecuto=false;
	
	public Taladro(){
		vidaUtil = Constantes.vidaUtilTaladro;
		potencia = new Entero(Constantes.potenciaTaladro);
	}
	
	/**
	 * El ejecutor usa el taladro
	 * @param ejecutor
	 */
	
	public void ejecutarSobre(PoseedorDeHabilidad ejecutor) {
		// bloque debajo
		if(vidaUtil>0){
			Bloque bloqueADestruir = ejecutor.getMapa().getBloqueNEnDireccionDesdeUbicacionDe(ejecutor,1,Constantes.abajo);
			bloqueADestruir.atacar(potencia);		
			vidaUtil--;
			ejecuto=true;
			
		//	System.out.println("taladre, me queda " + vidaUtil);
			
		}
		else
			ejecutor.eliminarHabilidad(this);
	}

	/**
	 * Indica si el ejecutor puede usar el taladro 
	 * @param ejecutor
	 * @return boolean
	 */
	
	public boolean esEjecutableSobre(PoseedorDeHabilidad ejecutor) {
		if(vidaUtil<=0){
			ejecutor.eliminarHabilidad(this);
			return false;
		}
		if(ejecutor.getSentidoVertical()!=Constantes.reposo)
			return false;
		try{
			return ejecutor.getMapa().getBloqueNEnDireccionDesdeUbicacionDe(ejecutor,1,Constantes.abajo).esFirme();
		}
		catch(FueraDelMapaException e){
			return false;
		}
	}

	/**
	 * Tiempo que tarda en hacer una vuelta del taladro
	 * @param ejecutor
	 * @return long
	 */
	
	public long tiempoDeEjecucion(PoseedorDeHabilidad ejecutor) {
		return Constantes.tiempoCiclo;
	}

	@Override
	public boolean seEjecuto() {
		if(ejecuto==false)
			return false;
		ejecuto=false;
		return true;
	}

}

